package com.ylr.base.framework.service;

import java.util.concurrent.Callable;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
import java.util.function.Supplier;

/**
 * Created by IntelliJ IDEA.
 *
 * @author wei
 * date: 2023-03-31 18:01:25
 * className: AsyncService 异步操作服务接口
 * version: 1.0
 * description:
 */
public interface AsyncService {

    /**
     * 异步执行任务
     * @param runnable 任务对象
     * @return 不返回执行结果
     */
    CompletableFuture<Void> runAsync(Runnable runnable);

    /**
     * 异步执行任务
     * @param supplier 任务对象
     * @return 执行结果
     * @param <V> 泛型参数
     */
    <V> CompletableFuture<V> supplyAsync(Supplier<V> supplier);

    /**
     * 异步延迟执行任务
     * @param runnable 任务对象
     * @param delay    延迟时长
     * @param unit     时长单位
     */
    void schedule(Runnable runnable, long delay, TimeUnit unit);

    /**
     * 异步延迟执行任务
     * @param callable 任务对象
     * @param delay    延迟时长
     * @param unit     时长单位
     * @return 执行结果
     * @param <V> 泛型参数
     */
    <V> ScheduledFuture<V> schedule(Callable<V> callable, long delay, TimeUnit unit);

}
